Conventional storage management and file relocation solutions use multi-tier storage systems to balance performance and costs. At higher tiers, performance is better but the cost is higher, while at lower tiers the cost is reduced but so is performance. Accordingly, policies can be created that will move files to higher-performance storage devices based on, for example, input/output (I/O) “temperature” (e.g., frequency of access) or service requirements (e.g., service level agreements), while unimportant or out-of-date files can be moved to less expensive storage devices without changing the way users or applications access those files.
With dynamic storage tiering (DST), files can be dynamically moved between tiers without having to take the application offline and without changing the way an application or database accesses the information. Consequently, the move is usually transparent to the users and applications that own the files. Furthermore, as data is moved between the different storage tiers, policies can be centrally managed and dynamic, and can support a heterogeneous server and storage infrastructure that does not require modifications to application, database, or backup/recovery policies.
Solid state devices or drives (SSDs) are used as one tier in a DST system as well as a cache for underlying hard disk device/drive (HDD) storage. As blocks of an SSD are used and reused, free blocks, block allocation and de-allocation (freeing of allocated blocks), and usage of allocated blocks are tracked. Traditional methods use free block lists or free block bitmaps to allocate free blocks and to free allocated blocks, but special care needs to be taken because SSDs have particular characteristics. For example, SSDs perform well for random/sequential reads and sequential writes, but do not perform as well for random writes because, before a region of SSD storage can be overwritten, it must first be erased. Erasing cannot be done for small-sized regions; instead, it must be done at the level of block size, which may be greater than or equal to 128 KB (kilo-bytes).
To mitigate the erasure penalty, SSDs now support a TRIM command or utility. The TRIM command can be issued to the SSD to inform the SSD that a certain region is to be marked “free.” As a result, the SSD will not try to preserve old data during its internal block remapping and garbage collection activities. The TRIM command is also able to erase the designated region as a whole, provided the region is appropriately aligned with the erasure block boundaries.
Although mitigated by the above, some amount of penalty is still associated with the use of the TRIM command. For example, a random write to an SSD can be delayed while a decision is made whether or not a region of the SSD needs to be erased in order to provide space for the data to be written, and then further delayed while the TRIM command is executed.